home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -in_the_mag- / emulation / amiga / uae-0.7.0b2 / src / include / options.h < prev    next >
C/C++ Source or Header  |  1998-01-20  |  6KB  |  219 lines

  1.  /*
  2.   * UAE - The Un*x Amiga Emulator
  3.   *
  4.   * Stuff
  5.   *
  6.   * Copyright 1995, 1996 Ed Hanway
  7.   * Copyright 1995-97 Bernd Schmidt
  8.   */
  9.  
  10. #define UAEMAJOR 0
  11. #define UAEMINOR 6
  12. #define UAEURSAMINOR 9
  13.  
  14. typedef enum { KBD_LANG_US, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES } KbdLang;
  15.  
  16. extern int version;
  17.  
  18. struct uae_prefs {
  19.     int framerate;
  20.     int illegal_mem;
  21.     int no_xhair;
  22.     int use_serial;
  23.     int serial_demand;
  24.     int parallel_demand;
  25.     int automount_uaedev;
  26.  
  27.     int fake_joystick;
  28.     KbdLang keyboard_lang;
  29.     int allow_save;
  30.     int emul_accuracy;
  31.     int test_drawing_speed;
  32.  
  33.     int produce_sound;
  34.     int stereo;
  35.     int sound_bits;
  36.     int sound_freq;
  37.     int sound_minbsiz;
  38.     int sound_maxbsiz;
  39.  
  40.     int gfx_width;
  41.     int gfx_height;
  42.     int gfx_lores;
  43.     int gfx_linedbl;
  44.     int gfx_correct_aspect;
  45.     int gfx_xcenter;
  46.     int gfx_ycenter;
  47.     int color_mode;
  48.  
  49.     /* X11 specific options */
  50.     int use_low_bandwidth;
  51.     int use_mitshm;
  52.  
  53.     int blits_32bit_enabled;
  54.     int immediate_blits;
  55.  
  56.     char df[4][256];
  57.  
  58.     int copper_pos;
  59.     int m68k_speed;
  60. };
  61.  
  62. #define JSEM_DECODEVAL(n,v) (((v) >> (n*8)) & 255)
  63. /* Determine how port n is configured with the value v in fake_joystick */
  64. #define JSEM_ISJOY0(n,v) (JSEM_DECODEVAL(n,v) == 0)
  65. #define JSEM_ISJOY1(n,v) (JSEM_DECODEVAL(n,v) == 1)
  66. #define JSEM_ISMOUSE(n,v) (JSEM_DECODEVAL(n,v) == 2)
  67. #define JSEM_ISNUMPAD(n,v) (JSEM_DECODEVAL(n,v) == 3)
  68. #define JSEM_ISCURSOR(n,v) (JSEM_DECODEVAL(n,v) == 4)
  69. #define JSEM_ISSOMEWHEREELSE(n,v) (JSEM_DECODEVAL(n,v) == 5)
  70. extern const char *gameport_state (int n);
  71.  
  72. /* These preferences make sense only at startup. */
  73. extern int no_gui, use_debugger, use_gfxlib;
  74.  
  75. extern struct uae_prefs currprefs, changed_prefs;
  76.  
  77. extern void write_log (const char *);
  78. extern void machdep_init (void);
  79.  
  80. /* AIX doesn't think it is Unix. Neither do I. */
  81. #if defined(_ALL_SOURCE) || defined(_AIX)
  82. #undef __unix
  83. #define __unix
  84. #endif
  85.  
  86. extern char romfile[], keyfile[], prtname[], sername[];
  87.  
  88. extern int cloanto_rom;
  89.  
  90. #define MAX_COLOR_MODES 5
  91.  
  92. extern int fast_memcmp(const void *foo, const void *bar, int len);
  93. extern int memcmpy(void *foo, const void *bar, int len);
  94.  
  95. /*
  96.  * You can specify numbers from 0 to 5 here. It is possible that higher
  97.  * numbers will make the CPU emulation slightly faster, but if the setting
  98.  * is too high, you will run out of memory while compiling.
  99.  * Best to leave this as it is.
  100.  */
  101. #define CPU_EMU_SIZE 0
  102.  
  103. /* #define NEED_TO_DEBUG_BADLY */
  104.  
  105. #if !defined(USER_PROGRAMS_BEHAVE)
  106. #define USER_PROGRAMS_BEHAVE 0
  107. #endif
  108.  
  109. /* If emulating a 68020, turn off some options that don't make sense. */
  110. #if CPU_LEVEL > 1
  111. #undef NO_EXCEPTION_3
  112. #undef NO_PREFETCH_BUFFER
  113. #define NO_EXCEPTION_3
  114. #define NO_PREFETCH_BUFFER
  115. #endif
  116.  
  117. /* Some memsets which know that they can safely overwrite some more memory
  118.  * at both ends and use that knowledge to align the pointers. */
  119.  
  120. #define QUADRUPLIFY(c) (((c) | ((c) << 8)) | (((c) | ((c) << 8)) << 16))
  121.  
  122. /* When you call this routine, bear in mind that it rounds the bounds and
  123.  * may need some padding for the array. */
  124.  
  125. #define fuzzy_memset(p, c, o, l) fuzzy_memset_1 ((p), QUADRUPLIFY (c), (o) & ~3, ((l) + 4) >> 2)
  126. static __inline__ void fuzzy_memset_1 (void *p, uae_u32 c, int offset, int len)
  127. {
  128.     uae_u32 *p2 = (uae_u32 *)((char *)p + offset);
  129.     int a = len & 7;
  130.     len >>= 3;
  131.     switch (a) {
  132.      case 7: p2--; goto l1;
  133.      case 6: p2-=2; goto l2;
  134.      case 5: p2-=3; goto l3;
  135.      case 4: p2-=4; goto l4;
  136.      case 3: p2-=5; goto l5;
  137.      case 2: p2-=6; goto l6;
  138.      case 1: p2-=7; goto l7;
  139.      case 0: if (!--len) return; break;
  140.     }
  141.  
  142.     for (;;) {
  143.     p2[0] = c;
  144.     l1:
  145.     p2[1] = c;
  146.     l2:
  147.     p2[2] = c;
  148.     l3:
  149.     p2[3] = c;
  150.     l4:
  151.     p2[4] = c;
  152.     l5:
  153.     p2[5] = c;
  154.     l6:
  155.     p2[6] = c;
  156.     l7:
  157.     p2[7] = c;
  158.  
  159.     if (!len)
  160.         break;
  161.     len--;
  162.     p2 += 8;
  163.     }
  164. }
  165.  
  166. #define fuzzy_memset_le32(p, c, o, l) fuzzy_memset_le32_1 ((p), QUADRUPLIFY (c), (o) & ~3, ((l) + 7) >> 2)
  167. static __inline__ void fuzzy_memset_le32_1 (void *p, uae_u32 c, int offset, int len)
  168. {
  169.     uae_u32 *p2 = (uae_u32 *)((char *)p + offset);
  170.  
  171.     switch (len) {
  172.      case 9: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; p2[6] = c; p2[7] = c; p2[8] = c; break;
  173.      case 8: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; p2[6] = c; p2[7] = c; break;
  174.      case 7: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; p2[6] = c; break;
  175.      case 6: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; break;
  176.      case 5: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; break;
  177.      case 4: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; break;
  178.      case 3: p2[0] = c; p2[1] = c; p2[2] = c; break;
  179.      case 2: p2[0] = c; p2[1] = c; break;
  180.      case 1: p2[0] = c; break;
  181.      case 0: break;
  182.      default: printf("Hit the programmer.\n"); break;
  183.     }
  184. }
  185.  
  186. /*
  187.  * Frame rate hack. Currently only implemented for Pentium (P6?) CPUs.
  188.  */
  189. #if !defined __GNUC_MINOR__
  190. #undef HAVE_RDTSC
  191. #endif
  192.  
  193. #undef HAVE_INLINE_RPT
  194. #ifdef HAVE_RDTSC
  195. #define FRAME_RATE_HACK
  196.  
  197. typedef unsigned long frame_time_t;
  198. static inline frame_time_t read_processor_time (void)
  199. {
  200.     frame_time_t foo;
  201.     /* Don't assume the assembler knows rdtsc */
  202.     __asm__ (".byte 0x0f,0x31" : "=a" (foo) :);
  203.     return foo;
  204. }
  205. #define HAVE_INLINE_RPT
  206. #else
  207. typedef int frame_time_t;
  208. #endif
  209.  
  210. #if defined FRAME_RATE_HACK && !defined HAVE_INLINE_RPT
  211. extern frame_time_t read_processor_time (void);
  212. #endif
  213. extern frame_time_t vsynctime, vsyncmintime;
  214.  
  215. #if defined(AMIGA) && defined(__GNUC__)
  216. #include "od-amiga/amiga-kludges.h"
  217. #endif
  218.  
  219.